Extracted UserScript
2021-08-04
I was reminded of this when you mentioned it.
SRS is Spaced Repetition System, a system that assists in reading back at gradually growing intervals. It is like a page that has not been updated for a long period of time surfacing occasionally and creating an opportunity to look back at it.
I haven't continued to use it.
In retrospect, I'm not sure it was necessary to provide too many short-term links for the purpose of "creating an opportunity for old pages to surface and be looked back on from time to time.
If you want to rebuild it.
A few items are displayed in each of the following three categories: "100 days ago," "1 year ago," and "several years ago."
I'll make an improved version between meetings on Friday.
---
2018-06-22
Cut out a section of a page in citation format on a new page
The original page is not edited.
Put a line permalink from the new page to the original page.
I want to make a
Will the original page be edited?
Can it be edited?
What can be done with this
I couldn't figure out how to make a line permalink, but window.scrapbox.Page lines has a set of permalinks and text Is the current New Page feature not good enough? Why not?
Deletion and editing can be done with the reassurance that the original text is still there.
So the original text must be untouched.
code:script.js
function clip(text){
debugger;
const lines = text.split(/\r\n/g) .trim()
.replace(/\^\+.icon\]/gm, '')
const projectRoot = (() => {
const tmp = location.href.split('/')
tmp.pop()
return tmp.join('/')
})()
const currentPageTitle = decodeURIComponent(location.href.split(/\//g).pop())
lines.unshift(from [${currentPageTitle}])
const body = encodeURIComponent(lines.join('\n'))
window.open(${projectRoot}/Re:${currentPageTitle}?body=${body})
return text
}
scrapbox.PopupMenu.addButton({title: 'Clip', onClick: clip})
code:js
scrapbox.PopupMenu.addButton({
title: 'NewPage2',
onClick: text => {
const lines = text.split(/\r\n/g) .trim()
.replace(/\^\+.icon\]/gm, '')
const projectRoot = (() => {
const tmp = location.href.split('/')
tmp.pop()
return tmp.join('/')
})()
const currentPageTitle = decodeURIComponent(location.href.split(/\//g).pop())
lines.unshift(from [${currentPageTitle}])
const body = encodeURIComponent(lines.join('\n'))
window.open(${projectRoot}/${title}?body=${body})
return [${title}]
}
})
code:js
const sortMode = 'log' // Interval Iteration Method
let visibleRankNum = 100; // ignored except for log
const day = 60 * 60 * 24 * 1000
const year = day * 365
let projectPages;
function get_data(){
let xhr = new XMLHttpRequest()
xhr.open('GET', /api/pages/${scrapbox.Project.name}?limit=10000)
xhr.onload = (e) => {
projectPages = JSON.parse(xhr.responseText).pages
sort_pages()
update_list()
}
xhr.send(null)
}
function sort_pages(){
const now = Date.now()
projectPages.forEach((page, index, pages) => {
if(diff > 10 * day){
page'score' = (Math.log(diff / (10 * day)) / Math.log(2)) % 1 page'ago' = Math.floor(diff / day) }
})
projectPages = projectPages.filter(page => (page'score' != null)) }
function create_page(title, lines){
const projectRoot = (() => {
const tmp = location.href.split('/')
tmp.pop()
return tmp.join('/')
})()
const body = encodeURIComponent(lines.join('\n'))
window.open(${projectRoot}/${title}?body=${body})
}
function update_list(){
scrapbox.PageMenu('Scrapbox Sort').removeAllItems()
let page_lists = [];
for (let i = 0; i < visibleRankNum; i++) {
if(page == null) break;
page_lists.push(${strftime(new Date(page.updated * 1000))}(${page['ago']}) [${page['title']}])
}
create_page("SRS" + new Date().toISOString().slice(0, 19), page_lists)
}
function pad(number) {
if (number < 10) {
return '0' + number;
}
return number;
}
function strftime(d){
return (
d.getUTCFullYear() +
'-' + pad(d.getUTCMonth() + 1) +
'-' + pad(d.getUTCDate())
)
}
scrapbox.PageMenu.addMenu({
title: 'Scrapbox SRS2',
onClick: () => {
scrapbox.PageMenu('Scrapbox SRS').addItem({ title: 'Please wait...', image: null, onClick: () => null })
get_data();
scrapbox.PageMenu('Scrapbox Sort').removeAllItems()
}
})
---
This page is auto-translated from /nishio/抜き書きUserScript. If you looks something interesting but the auto-translated English is not good enough to understand it, feel free to let me know at @nishio_en. I'm very happy to spread my thought to non-Japanese readers.